Gradleの機能を使って、GithubMavenRepo


概要

Gradleで管理しているプロジェクトを、Github上にupして、

MavenRepoとして使用できるようにする。

以降は、MavenCentralに代わって、自分たちのGithubを依存性解決に使えるようになる。


(private useのための認証などは書いてません。すまん、眠い。)



おおざっぱな手順

1.build.gradleに追記、MavenRepoとしての設定を書きこんで、MavenRepo用にビルド。

2.ビルドしたものをGithubにpush。

3.使用するプロジェクトを一つ作る。

4.2でupしたMavenRepoに依存する感じに設定してウマー



こちらが出来上がったものになります

既存のいい感じのが無いので新規で用意。実際に作ったものを下記にupしておいた。

MavenRepoになる側

SampleMavenRepoByGradle

https://github.com/sassembla/SampleMavenRepoByGradle

Github上のMavenRepoを使う側

SampleGithubRepoUseProjectByGradle

https://github.com/sassembla/SampleGithubRepoUseProjectByGradle



1.build.gradleに追記、MavenRepoとしての設定を書きこんで、MavenRepo用にビルド

通常のJavaプロジェクトをビルドする以外に、下記の部分がMavenRepoを作る上でポイントになる。


//MavenRepository identity setting リポジトリの設定。これらは当然、読み込み時に使用する
group = 'com.kissaki.sample'	//グループ
archivesBaseName = 'Samplemavenrepobygradle' 	//アーカイブベース
version = '0.0.1'		//バージョン

uploadArchives {//アーカイブに際して、Maven形式で、どこに出力するかを指定する箇所
	repositories {
		mavenDeployer {
			repository(url: "file:${projectDir}")
		}
	}
}

//まんまコピペさせてもらった、pomのライセンス情報とかを設定する箇所
[install.repositories.mavenInstaller, uploadArchives.repositories.mavenDeployer]*.pom*.whenConfigured { pom ->
	pom.project {
		inceptionYear '2012'
		packaging 'jar'
		licenses {
			license {
				name 'The Apache Software License, Version 2.0'
				url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
				distribution 'repo'
			}
		}
	}
}


この状態で、src下に下記ファイルがあるとする。

src/com/kissaki/sample/

SampleMavenRepoByGradle.java


内容は

package com.kissaki.sample;

public class SampleMavenRepoByGradle {
	public void something() {
		System.out.println("Something!!");
	}
}


この状態で、


gradle uploadArchives

ってやると、

com/フォルダ以下がちょこちょこ作られる。(凄く横に長い画像)

スクリーンショット 2012-07-26 23.58.23.png

中身にはjarとかpomとかが出来てる。pom、、、なんて汚らわしい。



2.ビルドしたものをGithubにpush

まんま、Githubにpush。

comなんちゃらも、ちゃんとaddして含もう。



3.使用するプロジェクトを一つ作る

SampleGithubRepoUseProjectByGradle を作成。


Javaのプロジェクトで、せっかくなのでmain関数の中で

SampleMavenRepoByGradle.java の内容を使う。


src/com/kissaki フォルダ以下に下記を用意。

SampleGithubRepoUseProjectByGradle.java


package com.kissaki;

import com.kissaki.sample.*;

public class SampleGithubRepoUseProjectByGradle {


	/**
	 * @param args
	 */
	public static void main(String[] args) {
		SampleMavenRepoByGradle m = new SampleMavenRepoByGradle();
		m.something();
	}

}


この状態で gradle compileJava とかやっても、SampleMavenRepoByGradleクラスの依存性解決ができず

エラーになること必須。



4. 2でupしたMavenRepoに依存する感じに設定してウマー

githubへの依存は、こんな感じに書けば良い。


repositories { 
	mavenRepo urls: 'https://github.com/sassembla/SampleMavenRepoByGradle/raw/master/'
} 
 
dependencies {
	compile 'com.kissaki.sample:Samplemavenrepobygradle:0.0.1'
}


repoについては、Web上のgithubリポジトリのアドレスに、raw/master をつけてあげる事でOK。

compile時に依存するので、依存内容であるMavenRepoのidentityを書く。


で、実際に、 gradle compileJava でビルドしてみると

スクリーンショット 2012-07-27 0.25.27.png

あら、一発でうまく行った。(写真はTextMateのGradle bundle を使っています)

せっかくなので、jarで動かせるように、下記をbuild.gradleに書き加える。

jar {
	manifest {
		attributes 'Main-class': 'com.kissaki.SampleGithubRepoUseProjectByGradle' 
	}
	
	from {
		configurations.runtime.collect {
			if (it.isDirectory()){
				it
			} else {
				zipTree(it)
			}
		}
	}
}


からの、

gradle jar

スクリーンショット 2012-07-27 0.28.42.png

できたー。

実行してみよう。


java -jar /Users/sassembla/Desktop/SampleGithubRepoUseProjectByGradle/build/libs/SampleGithubRepoUseProjectByGradle.jar

スクリーンショット 2012-07-27 0.30.30.png

パーフェクトだウォルター。



参考

krmdから、この辺を参考にしたって聞いて自分も参考にしました。

http://wadahiro.hatenablog.com/entry/2012/07/24/234727

http://downright-amazed.blogspot.jp/2011/09/hosting-maven-repository-on-github-for.html